package cc.rengu.igas.bomp.core.realize;

import cc.rengu.igas.bomp.common.entity.*;
import cc.rengu.igas.bomp.facade.bean.BaseProdBean;
import cc.rengu.igas.bomp.facade.request.MchntProdInfoManageRequest;

import java.util.List;

public interface MchntManageOperationService {


    /**
     * 修改时 - 新增保存单个产品信息  （内管平台专用）
     *
     * @param request                请求
     * @param dbMchntBaseInfo        商户基本信息
     * @param auditStatus            审核状态
     * @param createTime             创建时间
     * @param totalMchntProdInfoList 商户产品信息list
     * @param totalBizTmpList        业务临时list
     * @param baseProdBean           基础产品信息
     * @throws Exception 异常
     */
    void addBaseProdInfoByModifySingleSave(MchntProdInfoManageRequest request, MchntBaseInfo dbMchntBaseInfo,
                                           String auditStatus, String createTime,
                                           List<MchntProdInfo> totalMchntProdInfoList, List<BizTmp> totalBizTmpList,
                                           BaseProdBean baseProdBean) throws Exception;

    /**
     * 修改保存单个产品信息  （内管平台专用）
     *
     * @param request                请求
     * @param dbMchntBaseInfo        商户基本信息
     * @param auditStatus            审核状态
     * @param createTime             创建时间
     * @param totalMchntProdInfoList 商户产品信息list
     * @param totalFeeInfoList       商户费率信息list
     * @param totalStageInfoList     商户分期信息list
     * @param totalAuthCtrlList      业务权限控制list
     * @param totalBizTmpList        业务临时list
     * @param baseProdBean           基础产品信息
     * @throws Exception 异常
     */
    void modifyBaseProdInfoByModifySingleSave(MchntProdInfoManageRequest request,
                                              MchntBaseInfo dbMchntBaseInfo,
                                              String auditStatus, String createTime,
                                              List<MchntProdInfo> totalMchntProdInfoList,
                                              List<MchntFeeInfo> totalFeeInfoList, List<MchntStageInfo> totalStageInfoList,
                                              List<MchntAuthCtrl> totalAuthCtrlList, List<BizTmp> totalBizTmpList,
                                              BaseProdBean baseProdBean) throws Exception;

    /**
     * 删除保存单个产品信息  （内管平台专用）
     *
     * @param request                请求
     * @param dbMchntBaseInfo        商户基本信息
     * @param auditStatus            审核状态
     * @param createTime             创建时间
     * @param totalMchntProdInfoList 商户产品信息list
     * @param totalFeeInfoList       商户费率信息list
     * @param totalStageInfoList     商户分期信息list
     * @param totalAuthCtrlList      业务权限控制list
     * @param totalBizTmpList        业务临时list
     * @param baseProdBean           基础产品信息
     * @throws Exception 异常
     */
    void deleteBaseProdInfo(MchntProdInfoManageRequest request,
                            MchntBaseInfo dbMchntBaseInfo,
                            String auditStatus,
                            String createTime,
                            List<MchntProdInfo> totalMchntProdInfoList,
                            List<MchntFeeInfo> totalFeeInfoList,
                            List<MchntStageInfo> totalStageInfoList,
                            List<MchntAuthCtrl> totalAuthCtrlList,
                            List<BizTmp> totalBizTmpList,
                            BaseProdBean baseProdBean) throws Exception;

    /**
     * 新增保存单个产品信息  （内管平台专用）
     *
     * @param request                请求
     * @param dbMchntBaseInfo        商户基本信息
     * @param auditStatus            审核状态
     * @param createTime             创建时间
     * @param totalMchntProdInfoList 商户产品信息list
     * @param totalFeeInfoList       商户费率信息list
     * @param totalStageInfoList     商户分期信息list
     * @param totalAuthCtrlList      业务权限控制list
     * @param totalBizTmpList        业务临时list
     * @param baseProdBean           基础产品信息
     * @throws Exception 异常
     */
    void addBaseProdInfoSingleSaveByAuditIsBeOrReject(MchntProdInfoManageRequest request, MchntBaseInfo dbMchntBaseInfo,
                                                      String auditStatus, String createTime,
                                                      List<MchntProdInfo> totalMchntProdInfoList,
                                                      List<MchntFeeInfo> totalFeeInfoList,
                                                      List<MchntStageInfo> totalStageInfoList,
                                                      List<MchntAuthCtrl> totalAuthCtrlList,
                                                      List<BizTmp> totalBizTmpList, BaseProdBean baseProdBean) throws Exception;

    /**
     * 修改保存单个产品信息  （内管平台专用）
     *
     * @param request                请求
     * @param dbMchntBaseInfo        商户基本信息
     * @param auditStatus            审核状态
     * @param createTime             创建时间
     * @param totalMchntProdInfoList 商户产品信息list
     * @param totalFeeInfoList       商户费率信息list
     * @param totalStageInfoList     商户分期信息list
     * @param totalAuthCtrlList      业务权限控制list
     * @param totalBizTmpList        业务临时list
     * @param baseProdBean           基础产品信息
     * @throws Exception 异常
     */
    void modifyBaseProdInfoSingleSaveByAuditBeOrReject(MchntProdInfoManageRequest request,
                                                       MchntBaseInfo dbMchntBaseInfo,
                                                       String auditStatus, String createTime,
                                                       List<MchntProdInfo> totalMchntProdInfoList,
                                                       List<MchntFeeInfo> totalFeeInfoList, List<MchntStageInfo> totalStageInfoList,
                                                       List<MchntAuthCtrl> totalAuthCtrlList, List<BizTmp> totalBizTmpList,
                                                       BaseProdBean baseProdBean) throws Exception;

    /**
     * 删除保存单个产品信息  （内管平台专用）
     *
     * @param request                请求
     * @param dbMchntBaseInfo        商户基本信息
     * @param auditStatus            审核状态
     * @param createTime             创建时间
     * @param totalMchntProdInfoList 商户产品信息list
     * @param totalFeeInfoList       商户费率信息list
     * @param totalStageInfoList     商户分期信息list
     * @param totalAuthCtrlList      业务权限控制list
     * @param totalBizTmpList        业务临时list
     * @param baseProdBean           基础产品信息
     * @throws Exception 异常
     */
    void deleteBaseProdInfoSingleSaveByAuditBeOrReject(MchntProdInfoManageRequest request,
                                                       MchntBaseInfo dbMchntBaseInfo,
                                                       String auditStatus, String createTime,
                                                       List<MchntProdInfo> totalMchntProdInfoList,
                                                       List<MchntFeeInfo> totalFeeInfoList, List<MchntStageInfo> totalStageInfoList,
                                                       List<MchntAuthCtrl> totalAuthCtrlList, List<BizTmp> totalBizTmpList,
                                                       BaseProdBean baseProdBean) throws Exception;

    /**
     * 新增商户产品信息
     *
     * @param mchntBaseInfo      商户基本信息
     * @param bizTmpList         业务临时list
     * @param bizHistoryList     业务历史list
     * @param mchntProdInfoList  商户产品信息list
     * @param mchntFeeInfoList   商户费率信息list
     * @param mchntStageInfoList 商户分期信息list
     * @param mchntAuthCtrlList  业务权限控制list
     * @param wechatMchntInfo    微信商户信息
     * @param alipayMchntInfo    支付宝商户信息
     * @param cupsMchntInfo      银联商户信息
     * @param mchntSignInfo      商户签约信息
     * @param mchntAcctInfoList  商户结算账户信息list
     * @param mchntImageInfoList 商户影像信息list
     * @throws Exception 异常
     */
    void addMchntProdInfoDb(MchntBaseInfo mchntBaseInfo,
                            List<BizTmp> bizTmpList,
                            List<BizHistory> bizHistoryList,
                            List<MchntProdInfo> mchntProdInfoList,
                            List<MchntFeeInfo> mchntFeeInfoList,
                            List<MchntStageInfo> mchntStageInfoList,
                            List<MchntAuthCtrl> mchntAuthCtrlList,
                            WechatMchntInfo wechatMchntInfo,
                            AlipayMchntInfo alipayMchntInfo,
                            CupsMchntInfo cupsMchntInfo,
                            MchntSignInfo mchntSignInfo,
                            List<MchntAcctInfo> mchntAcctInfoList,
                            List<MchntImageInfo> mchntImageInfoList) throws Exception;

    /**
     * 修改或审核商户信息
     *
     * @param request            请求
     * @param mchntBaseInfo      商户基础信息
     * @param bizTmpList         业务临时list
     * @param bizHistoryList     业务历史list
     * @param mchntProdInfoList  商户产品信息list
     * @param mchntFeeInfoList   商户费率信息list
     * @param mchntStageInfoList 商户分期信息list
     * @param mchntAuthCtrlList  业务权限控制list
     * @param wechatMchntInfo    微信商户信息
     * @param alipayMchntInfo    支付宝商户信息
     * @param cupsMchntInfo      银联商户信息表
     * @param mchntSignInfo      商户签约信息
     * @param mchntAcctInfoList  商户结算账户信息list
     * @param mchntImageInfoList 商户影像信息表list
     * @throws Exception 异常
     */
    void modifyOrAuditMchntInfoDb(MchntProdInfoManageRequest request,
                                  MchntBaseInfo mchntBaseInfo,
                                  List<BizTmp> bizTmpList,
                                  List<BizHistory> bizHistoryList,
                                  List<MchntProdInfo> mchntProdInfoList,
                                  List<MchntFeeInfo> mchntFeeInfoList,
                                  List<MchntStageInfo> mchntStageInfoList,
                                  List<MchntAuthCtrl> mchntAuthCtrlList,
                                  WechatMchntInfo wechatMchntInfo,
                                  AlipayMchntInfo alipayMchntInfo,
                                  CupsMchntInfo cupsMchntInfo,
                                  MchntSignInfo mchntSignInfo,
                                  List<MchntAcctInfo> mchntAcctInfoList,
                                  List<MchntImageInfo> mchntImageInfoList) throws Exception;

}
